Code
# Muestra todos los valores de w
wEn esta sección del tutorial se presentan algunas pistas sobre cómo navegar data.frames. Aquí, exploramos algunas tareas básicas en el manejo de datos como renombrar columnas, filtrar y seleccionar, y fusionar datos.
Para ilustrar las ideas, seleccionamos 10 países y algunas variables del conjunto de datos mundial originalmente contenido en el paquete ‘polscidata’. Lo llamamos w (de world, vamos), puedes inspeccionar el contenido en el siguiente fragmento de código:
# Muestra todos los valores de w
wLa función names() recupera todos los nombres de las columnas de un data.frame dado. Si usamos names(w), R nos mostrará el nombre y el orden de cada columna en el conjunto de datos:
# Nos da los nombres de todas las columnas del
# data.frame en el orden original que aparecen
names(w) [1] "country" "gini10" "dem_level4"
[4] "dem_rank14" "dem_score14" "lifeex_f"
[7] "lifeex_m" "literacy" "oil"
[10] "pop_0_14" "pop_15_64" "pop_65_older"
[13] "fertility" "govregrel" "regionun"
[16] "religoin" "spendeduc" "spendhealth"
[19] "spendmil" "hdi" "pop_age"
[22] "sexratio" "pop_total" "pop_urban"
[25] "gender_unequal" "gender_unequal_rank" "arda"
[28] "lifeex_total" "debt" "colony"
[31] "confidence" "decent08" "dem_other"
[34] "dem_other5" "democ" "democ11"
[37] "democ_regime" "democ_regime08" "district_size3"
[40] "durable" "effectiveness" "enpp3_democ"
[43] "enpp3_democ08" "dnpp_3" "eu"
[46] "fhrate04_rev" "fhrate08_rev" "frac_eth"
[49] "frac_eth2" "frac_eth3" "free_business"
[52] "free_corrupt" "free_finance" "free_fiscal"
[55] "free_govspend" "free_invest" "free_labor"
[58] "free_monetary" "free_property" "free_trade"
[61] "free_overall" "free_overall_4" "gdp08"
[64] "gdp_10_thou" "gdp_cap2" "gdp_cap3"
[67] "gdpcap2_08" "gdpcap3_08" "gdpcap08_2"
[70] "gdppcap08" "gdppcap08_3" "gender_equal3"
[73] "gini04" "gini08" "hi_gdp"
[76] "indy" "muslim" "natcode"
[79] "oecd" "pmat12_3" "polity"
[82] "pr_sys" "protact3" "regime_type3"
[85] "rich_democ" "unions" "unnetgro"
[88] "unnetuse" "unpovnpl" "unremitp"
[91] "unremitt" "vi_rel3" "votevap00s"
[94] "votevap90s" "women05" "women09"
[97] "women13" "ipu_wom13_all" "womyear"
[100] "womyear2" "dem_economist" "democ.yes"
[103] "country1"
Como podemos ver, hay 103 columnas en el conjunto de datos que comienzan con “country”. Si analizamos la lista de nombres de columnas más de cerca, podemos ver que la columna número 16 está mal escrita como “religoin”. Deberíamos corregirlo cambiándolo a “religion”. Hacemos eso simplemente asignando un nuevo valor para el 16º elemento de names():
# Cambia el nombre de la columna religoin a religion
names(w)[16] <- "religion"
# Puedes también utilizar el nombre original si
# no estás seguro de dónde se encuentra la variable
# en el orden.
names(w)[names(w)=="religoin"] <- "religion"
# Busca de nuevo el nombre de todas las columnas
names(w) [1] "country" "gini10" "dem_level4"
[4] "dem_rank14" "dem_score14" "lifeex_f"
[7] "lifeex_m" "literacy" "oil"
[10] "pop_0_14" "pop_15_64" "pop_65_older"
[13] "fertility" "govregrel" "regionun"
[16] "religion" "spendeduc" "spendhealth"
[19] "spendmil" "hdi" "pop_age"
[22] "sexratio" "pop_total" "pop_urban"
[25] "gender_unequal" "gender_unequal_rank" "arda"
[28] "lifeex_total" "debt" "colony"
[31] "confidence" "decent08" "dem_other"
[34] "dem_other5" "democ" "democ11"
[37] "democ_regime" "democ_regime08" "district_size3"
[40] "durable" "effectiveness" "enpp3_democ"
[43] "enpp3_democ08" "dnpp_3" "eu"
[46] "fhrate04_rev" "fhrate08_rev" "frac_eth"
[49] "frac_eth2" "frac_eth3" "free_business"
[52] "free_corrupt" "free_finance" "free_fiscal"
[55] "free_govspend" "free_invest" "free_labor"
[58] "free_monetary" "free_property" "free_trade"
[61] "free_overall" "free_overall_4" "gdp08"
[64] "gdp_10_thou" "gdp_cap2" "gdp_cap3"
[67] "gdpcap2_08" "gdpcap3_08" "gdpcap08_2"
[70] "gdppcap08" "gdppcap08_3" "gender_equal3"
[73] "gini04" "gini08" "hi_gdp"
[76] "indy" "muslim" "natcode"
[79] "oecd" "pmat12_3" "polity"
[82] "pr_sys" "protact3" "regime_type3"
[85] "rich_democ" "unions" "unnetgro"
[88] "unnetuse" "unpovnpl" "unremitp"
[91] "unremitt" "vi_rel3" "votevap00s"
[94] "votevap90s" "women05" "women09"
[97] "women13" "ipu_wom13_all" "womyear"
[100] "womyear2" "dem_economist" "democ.yes"
[103] "country1"
Puedes ver que ahora el nombre es correcto. Intenta renombrar otra variable a continuación:
# Cambia en nombre de de cualquier variable de tu
# preferencia (puede ser cualquiera)
# Llama names(w) para averiguar si todo ha ido como esperado.# Cambia en nombre de de cualquier variable de tu
# preferencia (puede ser cualquiera)
names(w)[names(w)=="spendeduc"] <- "spend_education"
# Llama names(w) para averiguar si todo ha ido como esperado.
names(w) [1] "country" "gini10" "dem_level4"
[4] "dem_rank14" "dem_score14" "lifeex_f"
[7] "lifeex_m" "literacy" "oil"
[10] "pop_0_14" "pop_15_64" "pop_65_older"
[13] "fertility" "govregrel" "regionun"
[16] "religion" "spend_education" "spendhealth"
[19] "spendmil" "hdi" "pop_age"
[22] "sexratio" "pop_total" "pop_urban"
[25] "gender_unequal" "gender_unequal_rank" "arda"
[28] "lifeex_total" "debt" "colony"
[31] "confidence" "decent08" "dem_other"
[34] "dem_other5" "democ" "democ11"
[37] "democ_regime" "democ_regime08" "district_size3"
[40] "durable" "effectiveness" "enpp3_democ"
[43] "enpp3_democ08" "dnpp_3" "eu"
[46] "fhrate04_rev" "fhrate08_rev" "frac_eth"
[49] "frac_eth2" "frac_eth3" "free_business"
[52] "free_corrupt" "free_finance" "free_fiscal"
[55] "free_govspend" "free_invest" "free_labor"
[58] "free_monetary" "free_property" "free_trade"
[61] "free_overall" "free_overall_4" "gdp08"
[64] "gdp_10_thou" "gdp_cap2" "gdp_cap3"
[67] "gdpcap2_08" "gdpcap3_08" "gdpcap08_2"
[70] "gdppcap08" "gdppcap08_3" "gender_equal3"
[73] "gini04" "gini08" "hi_gdp"
[76] "indy" "muslim" "natcode"
[79] "oecd" "pmat12_3" "polity"
[82] "pr_sys" "protact3" "regime_type3"
[85] "rich_democ" "unions" "unnetgro"
[88] "unnetuse" "unpovnpl" "unremitp"
[91] "unremitt" "vi_rel3" "votevap00s"
[94] "votevap90s" "women05" "women09"
[97] "women13" "ipu_wom13_all" "womyear"
[100] "womyear2" "dem_economist" "democ.yes"
[103] "country1"
Uno de los pasos más comunes en el análisis de datos en R es recuperar los datos de una o más columnas y usarlos para calcular las frecuencias, medias, medianas y otras estadísticas. En R puedes obtener esta información utilizando la fórmula dataframe$column. El primero elemento es el nombre del data.frame, seguido del símbolo $ y, luego, del nombre de la columna o variable. Por lo tanto, si queremos la lista de todos los países en el conjunto de datos w (contenido en la columna “country”), sólo necesitamos usar la expresión: w$country, como se muestra a continuación:
# Devuelve todos los nombres de países
# contenidos en el data.frame w:
w$country [1] Afghanistan Albania
[3] Algeria Angola
[5] Argentina Armenia
[7] Australia Austria
[9] Azerbaijan Bahrain
[11] Bangladesh Belarus
[13] Belgium Benin
[15] Bhutan Bolivia
[17] Bosnia and Herzegovina Botswana
[19] Brazil Bulgaria
[21] Burkina Faso Burma (Myanmar)
[23] Burundi Cambodia
[25] Cameroon Canada
[27] Cape Verde Central African Republic
[29] Chad Chile
[31] China Colombia
[33] Comoros Congo, Democratic Republic of the
[35] Congo, Republic of the Costa Rica
[37] Cote d'Ivoire Croatia
[39] Cuba Cyprus
[41] Czech Republic Denmark
[43] Djibouti Dominican Republic
[45] Ecuador Egypt
[47] El Salvador Equatorial Guinea
[49] Eritrea Estonia
[51] Ethiopia Fiji
[53] Finland France
[55] Gabon Gambia, The
[57] Georgia Germany
[59] Ghana Greece
[61] Guatemala Guinea
[63] Guinea-Bissau Guyana
[65] Haiti Honduras
[67] Hong Kong Hungary
[69] Iceland India
[71] Indonesia Iran
[73] Iraq Ireland
[75] Israel Italy
[77] Jamaica Japan
[79] Jordan Kazakhstan
[81] Kenya Korea, North
[83] Korea, South Kuwait
[85] Kyrgyzstan Laos
[87] Latvia Lebanon
[89] Lesotho Liberia
[91] Libya Lithuania
[93] Luxembourg Macedonia
[95] Madagascar Malawi
[97] Malaysia Mali
[99] Malta Mauritania
[101] Mauritius Mexico
[103] Moldova Mongolia
[105] Montenegro Morocco
[107] Mozambique Namibia
[109] Nepal Netherlands
[111] New Zealand Nicaragua
[113] Niger Nigeria
[115] Norway Oman
[117] Pakistan Palestine
[119] Panama Papua New Guinea
[121] Paraguay Peru
[123] Philippines Poland
[125] Portugal Qatar
[127] Romania Russia
[129] Rwanda Saudi Arabia
[131] Senegal Serbia
[133] Sierra Leone Singapore
[135] Slovakia Slovenia
[137] South Africa Spain
[139] Sri Lanka Sudan
[141] Suriname Swaziland
[143] Sweden Switzerland
[145] Syria Taiwan
[147] Tajikistan Tanzania
[149] Thailand Timor-Leste
[151] Togo Trinidad and Tobago
[153] Tunisia Turkey
[155] Turkmenistan Uganda
[157] Ukraine United Arab Emirates
[159] United Kingdom United States
[161] Uruguay Uzbekistan
[163] Venezuela Vietnam
[165] Yemen Zambia
[167] Zimbabwe
167 Levels: Afghanistan Albania Algeria Angola Argentina Armenia ... Zimbabwe
# Podemos también emplear el número de la columna
# en el orden que aparece en el data.frame
# después de una coma:
w[,1] [1] Afghanistan Albania
[3] Algeria Angola
[5] Argentina Armenia
[7] Australia Austria
[9] Azerbaijan Bahrain
[11] Bangladesh Belarus
[13] Belgium Benin
[15] Bhutan Bolivia
[17] Bosnia and Herzegovina Botswana
[19] Brazil Bulgaria
[21] Burkina Faso Burma (Myanmar)
[23] Burundi Cambodia
[25] Cameroon Canada
[27] Cape Verde Central African Republic
[29] Chad Chile
[31] China Colombia
[33] Comoros Congo, Democratic Republic of the
[35] Congo, Republic of the Costa Rica
[37] Cote d'Ivoire Croatia
[39] Cuba Cyprus
[41] Czech Republic Denmark
[43] Djibouti Dominican Republic
[45] Ecuador Egypt
[47] El Salvador Equatorial Guinea
[49] Eritrea Estonia
[51] Ethiopia Fiji
[53] Finland France
[55] Gabon Gambia, The
[57] Georgia Germany
[59] Ghana Greece
[61] Guatemala Guinea
[63] Guinea-Bissau Guyana
[65] Haiti Honduras
[67] Hong Kong Hungary
[69] Iceland India
[71] Indonesia Iran
[73] Iraq Ireland
[75] Israel Italy
[77] Jamaica Japan
[79] Jordan Kazakhstan
[81] Kenya Korea, North
[83] Korea, South Kuwait
[85] Kyrgyzstan Laos
[87] Latvia Lebanon
[89] Lesotho Liberia
[91] Libya Lithuania
[93] Luxembourg Macedonia
[95] Madagascar Malawi
[97] Malaysia Mali
[99] Malta Mauritania
[101] Mauritius Mexico
[103] Moldova Mongolia
[105] Montenegro Morocco
[107] Mozambique Namibia
[109] Nepal Netherlands
[111] New Zealand Nicaragua
[113] Niger Nigeria
[115] Norway Oman
[117] Pakistan Palestine
[119] Panama Papua New Guinea
[121] Paraguay Peru
[123] Philippines Poland
[125] Portugal Qatar
[127] Romania Russia
[129] Rwanda Saudi Arabia
[131] Senegal Serbia
[133] Sierra Leone Singapore
[135] Slovakia Slovenia
[137] South Africa Spain
[139] Sri Lanka Sudan
[141] Suriname Swaziland
[143] Sweden Switzerland
[145] Syria Taiwan
[147] Tajikistan Tanzania
[149] Thailand Timor-Leste
[151] Togo Trinidad and Tobago
[153] Tunisia Turkey
[155] Turkmenistan Uganda
[157] Ukraine United Arab Emirates
[159] United Kingdom United States
[161] Uruguay Uzbekistan
[163] Venezuela Vietnam
[165] Yemen Zambia
[167] Zimbabwe
167 Levels: Afghanistan Albania Algeria Angola Argentina Armenia ... Zimbabwe
Como se puede ver, los dos métodos devuelven la misma lista de países. Esto ocurre podque hemos realizado el mismo procedimiento utilizando dos métodos alternativos. No te preocupes por el segundo, lo describiremos con más detalle en la próxima subsección (es una de las características más chulas del R para manipular datos).
Ahora, intenta seleccionar la información sobre el Índice de Desarrollo Humano (columna hdi):
# Busca la información sobre el HDI:
w$hdi [1] 0.349 0.719 0.677 0.403 0.775 0.695 0.937 0.851 0.713 0.801 0.469 0.732
[13] 0.867 0.435 NA 0.643 0.710 0.633 0.699 0.743 0.305 0.451 0.282 0.494
[25] 0.460 0.888 0.534 0.315 0.295 0.783 0.663 0.689 0.428 0.239 0.489 0.725
[37] 0.397 0.767 NA 0.810 0.841 0.866 0.402 0.663 0.695 0.620 0.659 0.538
[49] NA 0.812 0.328 0.669 0.871 0.872 0.648 0.390 0.698 0.885 0.467 0.855
[61] 0.560 0.340 0.289 0.611 0.404 0.604 0.862 0.805 0.869 0.519 0.600 0.702
[73] NA 0.895 0.872 0.854 0.688 0.884 0.681 0.714 0.470 NA 0.877 0.771
[85] 0.598 0.497 0.769 NA 0.427 0.300 0.755 0.783 0.852 0.701 0.435 0.385
[97] 0.744 0.309 0.815 0.433 0.701 0.750 0.623 0.622 0.769 0.567 0.284 0.606
[109] 0.428 0.890 0.907 0.565 0.261 0.423 0.938 NA 0.490 NA 0.755 0.431
[121] 0.640 0.723 0.638 0.795 0.795 0.803 0.767 0.719 0.385 0.752 0.411 0.735
[133] 0.317 0.846 0.818 0.828 0.597 0.863 0.658 0.379 0.646 0.498 0.885 0.874
[145] 0.589 NA 0.580 0.398 0.654 0.502 0.428 0.736 0.683 0.679 0.669 0.422
[157] 0.710 0.815 0.849 0.902 0.765 0.617 0.696 0.572 0.439 0.395 0.140
Como podéis ver, algunos valores aparecen como NA. Esto significa que no hay datos disponibles para esos países en particular. El R utiliza NA (Not Available) para representar los valores faltantes o no informados. Siempre que ve un NA, lo retira de los cálculos o lo trata de la manera que definamos en nuestros análisis.
Existen múltiples formas de abrir archivos de Excel en R. La más fácil es utilizar la función read.xlsx() del paquete openxlsx. A pesar de que la función read.xlsx() sólo funciona con archivos de Excel recientes (aquellos con la extensión .xlsx), su principal ventaja es poder abrir datos directamente desde Internet sin tener que descargar el archivo primero. El código a continuación abre un Excel que contiene los niveles de educación por nacionalidad y sexo del Censo Demográfico 2021 utilizando un enlace de Dropbox:
library(openxlsx)
d <- read.xlsx("https://www.dropbox.com/s/orz8fdeg8as00fl/edu_nacion.xlsx?dl=1")
dEl archivo está ordenado y cada columna está identificada por un nombre. Otros símbolos, notas y comentarios fueron eliminados previamente para facilitar la lectura de los datos. También seleccionamos sólo los datos para “ambos sexos” y eliminamos la información detallada para cada sexo.
Ahora, copia el enlace a continuación y pégalo en tu navegador para descargar y cargar el archivo original desde la página web del INE (Instituto Nacional de Estadística):
https://ine.es/jaxi/files/tpx/es/xlsx/55231.xlsx
Como puedes observar, el archivo tiene encabezados, notas y una estructura más compleja en comparación con los datos abiertos anteriormente. El primer paso para utilizar datos en CUALQUIER paquete estadístico es asegurarse de que tus datos se ajustan a la estructura de una tabla de N filas x N columnas.
Si intentamos abrir el archivo sin tratarlo antes, tal como lo proporciona el INE, aparecerá así:
library(openxlsx)
d <- read.xlsx("https://ine.es/jaxi/files/tpx/es/xlsx/55231.xlsx?nocab=1")
dAhora, compara los dos.
La primera versión está ordenada, con nombres de variables identificando cada columna y los datos están bien estructurados.
La segunda versión es cruda, sin nombres de columnas estructurados y la mayoría de los datos no están tratados.
Por lo tanto, antes de abrir datos en R, verifica si el formato es adecuado o si necesitas realizar un trabajo preliminar.
Otros formatos comunes son los archivos de valores separados por comas (CSV). Estos archivos son básicamente texto con comas separando cada columna. Son particularmente útiles porque:
Son fáciles de almacenar y comprimir. Archivos con incluso gigabytes pueden ser comprimidos en archivos mucho más pequeños.
Pueden ser abiertos en casi cualquier hoja de cálculo (como Excel o Numbers) o paquete estadístico (R, SPSS, Stata, SAS).
Son robustos a los cambios en la tecnología. Versiones de Excel o SPSS hacen que los viejos conjuntos de datos sean incompatibles con el nuevo software. Dado que son texto básico, los archivos CSV son siempre compatibles y probablemente seguirán siendo compatibles en el futuro.
La función para abrir archivos CSV en R es read.csv(). El código a continuación abre el archivo CSV que contiene la puntuación de Rotten Tomatoes para cada una de las películas de Robert De Niro:
d <- read.csv("https://people.sc.fsu.edu/~jburkardt/data/csv/deniro.csv")
dSpain is different
Algunos países utilizan comas para indicar dígitos decimales en los números. Por lo tanto, 9.99 en los EE.UU. es lo mismo que 9,99 en España. Por esta razón, la mayoría de los archivos csv en esos países utilizan punto y coma (;) para separar columnas. Si utilizamos read.csv() los datos no se leerían correctamente. En esos casos, puedes utilizar la función más general read.delim() para abrir los archivos csv con otros separadores como punto y coma.
El código a continuación abre un archivo con la definición de las variables para estudios postelectorales del CIS. El archivo original utiliza punto y coma para separar las variables. Por lo tanto, empleamos la función read.delim() y añadimos el parámetro sep=“;” después del enlace al archivo.
d <- read.delim("https://www.dropbox.com/s/6f8nfzshzwelgil/CIS_definicion.csv?dl=1",sep = ";")
dSPSS es un paquete estadístico muy popular en las Ciencias Sociales. No es sorprendente que muchos estudios utilicen archivos de datos SPSS (.sav) como fuente principal para distribuir sus resultados. El paquete foreign ayuda a abrir datos de otras fuentes como SPSS, dbf y Stata. En el código a continuación, utilizamos la función read.spss() para abrir el archivo de datos SPSS del estudio postelectoral realizado por el Centro de Investigaciones Sociológicas (CIS) para las Elecciones Generales de España celebradas en noviembre de 2019.
library(foreign)
d <- read.spss("https://www.dropbox.com/s/s0j6hsidpy08ab3/3269.sav?dl=1",
to.data.frame = T)
d